<?php


namespace app\common\middleware;

use support\bootstrap\Annotation;
/**
 * 通用判断控制器或者方法是否有注解
 */
trait GetAnnotaion
{
    /**
     * 判断控制器或者方法上是否有不需要登录注解 有返回true 没有返回false
     * @param $request
     * @return bool
     * @throws \ReflectionException
     */
    protected function getHasAnnotation($request, $annotaionName = '') {
        if (empty($annotaionName)) {
            return false;
        }
        $reflectionClass = new \ReflectionClass($request->controller);
        $reader = Annotation::instance();
        // 先判断控制器是否有注解
        $hasAnnotation = $reader->getClassAnnotation($reflectionClass, $annotaionName);
        if ($hasAnnotation) {
            return true;
        }
        // 判断方法是否有注解
        $method = $reflectionClass->getMethod($request->action);
        $hasAnnotation = $reader->getMethodAnnotation($method, $annotaionName);
        return $hasAnnotation ? true : false;
    }
}
